#pragma once

#include <queue>
#include "deque.hpp"
#include "vector.hpp"
#include "memory_allocator.hpp"
#include "ned_pool.hpp"

namespace cpac
{

	// Custom queue template.
	//--------------------------------------
	// Usage is cpac::queue<int>::type int_queue;
	// This container specifies a default allocator for us, but we could of course
	// pass it another one if we need to.
	template
		<
			typename _Type, 
			typename _Container = deque< _Type >::type, 
			class _Compare = std::less< typename _Container::value_type > 
		> 
	struct queue 
	{
		typedef std::queue< _Type, _Container, _Compare > type;
	};
	//--------------------------------------

	// Custom priority_queue template.
	//--------------------------------------
	// Usage is cpac::priority_queue<int>::type int_priority_queue;
	// This container specifies a default allocator for us, but we could of course
	// pass it another one if we need to.
	template
		<
			typename _Type, 
			typename _Container = vector< _Type >::type, 
			class _Compare = std::less< typename _Container::value_type > 
		> 
	struct priority_queue 
	{
		typedef std::priority_queue< _Type, _Container, _Compare > type;
	};
	//--------------------------------------
}
